home *** CD-ROM | disk | FTP | other *** search
Wrap
/* $Revision Header built automatically *************** (do not edit) ************ ** ** © Copyright by Frank Mariak ** ** File : MyData:SASC-DATA/RealDev/Real3DLibMain.c ** Created on : Dienstag, 07.02.95 13:24:22 ** Created by : Frank Mariak ** Current revision : V40.1 ** ** ** Purpose ** ------- ** Real3D CyBERgraphics display driver ** ** Revision V40.1 ** -------------- ** created on Samstag, 04.03.95 02:35:06 by Frank Mariak. LogMessage : ** - now supports all v2 library calls ** ** Revision V1.0 ** -------------- ** created on Dienstag, 07.02.95 13:24:22 by Frank Mariak. LogMessage : ** --- Initial release --- ** *********************************************************************************/ #define REVISION "40.1" #define REVDATE "04.03.95" #define REVTIME "02:35:06" #define AUTHOR "Frank Mariak" #define VERNUM 40 #define REVNUM 1 #define PROGNAME "CyBERgraphics Real3D RenderLibrary" // // includes // #define USE_BUILTIN_MATH #include <string.h> #include <exec/types.h> #include <exec/memory.h> #include <graphics/modeid.h> #include <intuition/intuitionbase.h> #include <intuition/intuition.h> #include <intuition/screens.h> #include <clib/exec_protos.h> #include <pragmas/exec_sysbase_pragmas.h> #include <clib/intuition_protos.h> #include <pragmas/intuition_pragmas.h> #include <cybergraphics/cybergraphics.h> #include <pragmas/cybergraphics_pragmas.h> #include <proto/intuition.h> #include <proto/graphics.h> #include <proto/asl.h> // // global data (read only or write once) // struct Library *SysBase; struct Library *CyberGfxBase; static const char version[] = "\0$VER: " PROGNAME " " REVISION " (" REVDATE ") © 1995 Vision Factory Development"; APTR __asm __saveds R3DInitDspDrv(void); void __asm __saveds R3DFreeDspDrv(register __a0 APTR handle); void __asm __saveds R3DSetMode(register __a0 APTR handle); void __asm __saveds R3DGetSize(register __a0 APTR handle,register __a1 int *x,register __d0 int *y); void __asm __saveds R3DWriteLine(register __a0 APTR handle,register __a1 int *buffer,register __a2 int len,register __d0 int x,register __d1 int y); void __asm __saveds R3DReadLine(register __a0 APTR handle,register __a1 int *buffer,register __a2 int len,register __d0 int x,register __d1 int y); void __asm __saveds R3DClsScr(register __a0 APTR handle,register __a1 ULONG color); void __asm __saveds R3DCustomSave(register __a0 APTR handle,register __a1 char *name,register __a2 int x,register __d0 int y,register __d1 int w,register __d2 int h); int __asm __saveds R3DInitRen(register __a0 struct R3DHandle *handle); void __asm __saveds R3DEndRen(register __a0 struct R3DHandle *handle); int __asm __saveds R3DEndRow(register __a0 struct R3DHandle *handle, register __a1 int y); void __asm __saveds R3DGetAspect(register __a0 struct R3DHandle *handle,register __a1 int *w ,register __d0 int *h); int __asm __saveds R3DExtF(register __a0 struct R3DHandle *handle); ULONG DefDispID = -1; struct R3DHandle { struct Screen *RenderScr; ULONG Flags; }; APTR __asm __saveds R3DInitDspDrv() { struct R3DHandle *R3DH; if(R3DH=AllocVec(sizeof(struct R3DHandle),MEMF_CLEAR|MEMF_PUBLIC)) { if(DefDispID!=INVALID_ID) { ULONG Depth=GetCyberIDAttr(CYBRIDATTR_DEPTH,DefDispID); if(R3DH->RenderScr=OpenScreenTags(NULL, SA_Width,STDSCREENWIDTH, SA_Height,STDSCREENHEIGHT, SA_DisplayID,DefDispID, SA_Title,(UBYTE *)"CyBERgraphics Real3D Render Display", SA_Depth,Depth, TAG_DONE)) { return((APTR)R3DH); } else { FreeVec(R3DH); return(0L); } } else { FreeVec(R3DH); return(0L); } } } void __asm __saveds R3DFreeDspDrv(register __a0 struct R3DHandle *handle) { if(handle->RenderScr) CloseScreen(handle->RenderScr); FreeVec(handle); } void __asm __saveds R3DSetMode(register __a0 struct R3DHandle *handle) { struct ScreenModeRequester *AslReq; if(AslReq=(struct ScreenModeRequester *)AllocAslRequestTags(ASL_ScreenModeRequest,TAG_DONE)) { ULONG retval; ScreenToFront(handle->RenderScr); if(retval=AslRequestTags(AslReq, ASLSM_Screen,handle->RenderScr, ASLSM_TitleText,(UBYTE *)"Please select Rendermode", ASLSM_PositiveText,(UBYTE *)"Use", ASLSM_NegativeText,(UBYTE *)"Cancel", ASLSM_InitialDisplayID,DefDispID, ASLSM_PropertyFlags,0, ASLSM_PropertyMask,0, ASLSM_MinDepth,15, ASLSM_MaxDepth,32, TAG_DONE)) { if(AslReq->sm_DisplayID != INVALID_ID) { ULONG Depth=GetCyberIDAttr(CYBRIDATTR_DEPTH,AslReq->sm_DisplayID); DefDispID=AslReq->sm_DisplayID; if(handle->RenderScr) CloseScreen(handle->RenderScr); handle->RenderScr=OpenScreenTags(NULL, SA_DisplayID,DefDispID, SA_Title,(UBYTE *)"CyBERgraphics Real3D Render Display", SA_Depth,Depth, TAG_DONE); } FreeAslRequest(AslReq); } } } void __asm __saveds R3DGetSize(register __a0 struct R3DHandle *handle,register __a1 int *x,register __d0 int *y) { struct Screen *MyScreen; MyScreen=handle->RenderScr; *x = MyScreen->Width; *y = MyScreen->Height-MyScreen->BarHeight-1; } void __asm __saveds R3DWriteLine(register __a0 struct R3DHandle *handle,register __a1 int *buffer,register __a2 int len,register __d0 int x,register __d1 int y) { if(handle) { struct Screen *rscr=handle->RenderScr; WritePixelArray(buffer,0,0,len*4,&rscr->RastPort,x,y+rscr->BarHeight+1,len,1,RECTFMT_RGBA); } } void __asm __saveds R3DReadLine(register __a0 struct R3DHandle *handle,register __a1 int *buffer,register __a2 int len,register __d0 int x,register __d1 int y) { if(handle) { struct Screen *rscr=handle->RenderScr; ReadPixelArray(buffer,0,0,len*4,&rscr->RastPort,x,y+rscr->BarHeight+1,len,1,RECTFMT_RGBA); } } void __asm __saveds R3DClsScr(register __a0 struct R3DHandle *handle,register __a1 ULONG color) { if (handle->RenderScr) { struct Screen *rscr=handle->RenderScr; EraseRect(&rscr->RastPort,0,rscr->BarHeight+1,rscr->Width,rscr->Height); } } void __asm __saveds R3DCustomSave(register __a0 APTR handle,register __a1 char *name,register __a2 int x,register __d0 int y,register __d1 int w,register __d2 int h) { return(0L); } int __asm __saveds R3DInitRen(register __a0 struct R3DHandle *handle) { if (handle->RenderScr) { ScreenToFront(handle->RenderScr); } return(TRUE); } void __asm __saveds R3DEndRen(register __a0 struct R3DHandle *handle) { if (handle->RenderScr) { ScreenToBack(handle->RenderScr); } } int __asm __saveds R3DEndRow(register __a0 struct R3DHandle *handle, register __a1 int y) { return(TRUE); } void __asm __saveds R3DGetAspect( register __a0 struct R3DHandle *handle, register __a1 int *w , register __d0 int *h) { *h = *w = 1; } int __asm __saveds R3DExtF(register __a0 struct R3DHandle *handle) { return(NULL); } int __saveds __UserLibInit(void) { SysBase = (*(struct Library **)4); if (CyberGfxBase = OpenLibrary("cybergraphics.library", 40)) { if((DefDispID=BestCModeIDTags( CYBRBIDTG_Depth,16, CYBRBIDTG_NominalWidth,640, CYBRBIDTG_NominalHeight,480, TAG_DONE))!=INVALID_ID) { return(0); } CloseLibrary(CyberGfxBase); } return(1); } void __saveds __UserLibCleanup(void) { }